﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Text.RegularExpressions;
using System.Windows.Media.Imaging;

namespace DataAccessComponents
{
    /// <summary>
    /// Klasa odzwierciedlająca tabele "Miasto" w bazie danych
    /// </summary>
    public class Miasto : INotifyPropertyChanged,IDataErrorInfo
    {
        /// <summary>
        /// Id miasta
        /// </summary>
        private int id_miasta;

        public int Id_miasta
        {
            get { return this.id_miasta; }
            set { this.id_miasta = value; NotifyPropertyChanged("Id_miasta"); }
        }

        /// <summary>
        /// Nazwa miasta
        /// </summary>
        private string nazwa;

        public string Nazwa
        {
            get { return this.nazwa; }
            set { this.nazwa = value; NotifyPropertyChanged("Nazwa"); }
        }

        /// <summary>
        /// Opis miasta
        /// </summary>
        private string opis;

        public string Opis
        {
            get { return opis; }
            set { opis = value; }
        }

        /// <summary>
        /// Opis skrócony
        /// </summary>
        private string opis_skrot;

        public string Opis_skrot
        {
            get { return opis_skrot; }
            set { opis_skrot = value; }
        }

        /// <summary>
        /// Informacje praktyczne o mieście
        /// </summary>
        private string informacje_praktyczne;

        public string Informacje_praktyczne
        {
            get { return informacje_praktyczne; }
            set { informacje_praktyczne = value; }
        }

        /// <summary>
        /// Id kraju
        /// </summary>
        private int id_kraju;

        public int Id_kraju
        {
            get { return this.id_kraju; }
            set { this.id_kraju = value; NotifyPropertyChanged("Id_kraj"); }
        }

        /// <summary>
        /// Obiekt Kraj zawierjący nazwę kraju w którym znajduje się miasto
        /// </summary>
        private Kraj kraj;

        public Kraj Kraj
        {
            get { return this.kraj; }
            set { this.kraj = value; NotifyPropertyChanged("Kraj"); }
        }

        /// <summary>
        /// Id galerii miasta
        /// </summary>
        private int id_galeria;

        public int Id_galeria
        {
            get { return id_galeria; }
            set { id_galeria = value; NotifyPropertyChanged("Id_galeria"); }
        }

        /// <summary>
        /// Galeria
        /// </summary>
        private Galeria galeria;

        public Galeria Galeria
        {
            get { return galeria; }
            set { galeria = value; }
        }


        /// <summary>
        /// Zdjecie główne miasta
        /// </summary>
        private int idzdjecieGlowne;

        public int IdzdjecieGlowne
        {
            get { return idzdjecieGlowne; }
            set { idzdjecieGlowne = value; }
        }
        /// <summary>
        /// Konstruktor tworzący obiekt Miasto
        /// </summary>
        /// <param name="im">Id miasta</param>
        /// <param name="n">Nazwa</param>
        /// <param name="op">Opis</param>
        /// <param name="info">Informacje praktyczne</param>
        /// <param name="ik">Id kraju</param>
        /// <param name="ig">Id galerii miasta</param>
        
        public Miasto(int im, string n,string op,string info, int ik,int ig)
        {
            this.id_miasta = im;
            this.nazwa = n;
            this.opis = op;
            this.informacje_praktyczne = info;
            this.id_kraju = ik;
            this.id_galeria = ig;
            this.galeria = new Galeria();
            this.opis_skrot = string.Empty;
            this.idzdjecieGlowne = 0;
        }

        public Miasto()
            : this(0, "","","", 0,0)
        { }



        #region INotifyPropertyChanged Members
        public event PropertyChangedEventHandler PropertyChanged;
        #endregion

        #region Private Helpers
        private void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));

            }
        }
        #endregion
        public string Error
        {
            get { return string.Empty; }
        }

        public string this[string propertyName]
        {
            get
            {
                string results = string.Empty;
                propertyName = propertyName ?? string.Empty;

                if (propertyName == "Nazwa")
                {
                    if (string.IsNullOrEmpty(this.Nazwa))
                    {
                        results = "Pole \"Nazwa\" nie może być puste";
                    }
                    else if (Regex.IsMatch(this.Nazwa, @"[@£_^{}\[~\]|ÆæßÉ!¤%&'()\*\+,.:;<=>§?]+"))
                    {
                        results = "Pole \"Nazwa\" zawiera niedozwolone znaki";
                    }

                }

                return results;
            }
        }
    }
}
